// Array 数组

type User = {
  id: number;
  username: string;
};

const firstUser: User = {
  id: 1,
  username: "YouthefullyPassionately",
};

// 定义了一个user类型的数组，也就是说数组中的元素必须是user类型。
const users: User[] = [firstUser];

users.push({
  id: 2,
  username: "YouthfullyPassionately",
});

console.log(users[1]);

// 数组的一些基本方法
type u1 = {
  name: string;
};

const arr: u1[] = [
  {
    name: "1",
  },
  {
    name: "2",
  },
  {
    name: "3",
  },
];

// length 数组的长度
console.log(arr.length);

// push 在数组的末尾添加元素 返回新数组的长度
arr.push({
  name: "4",
});
console.log(arr);

// pop 在数组的末尾删除元素 返回删除的元素
const lastPopmoveElement = arr.pop();
console.log(lastPopmoveElement);

// shift 在数组的开头删除元素 返回删除的元素
const firstElement = arr.shift();
console.log(firstElement);

// unshift 在数组的开头添加元素 返回新数组的长度
const newLength = arr.unshift({
  name: "0",
});
console.log(newLength);

// toString 将数组转换为字符串 返回字符串
console.log([1, 2, 3].toString());
// !这里会返回undefined undefined 因为数组中的元素是对象，对象转换为字符串是[object Object]
// console.log(arr.toString());
console.log([1, 2, 3].join(" ")); // 1 2 3

// 数组的挑战

type CartItem = {
  productName: string;
  quantity: number;
  price: number;
};

type Cart = {
  cartItems: CartItem[];
  addItemToCart: (newCartItem: CartItem) => void;
  clearCart: () => void;
};

const cartIt: Cart = {
  cartItems: [],
  addItemToCart(item: CartItem): void {
    this.cartItems.push(item);
  },
  clearCart() {
    this.cartItems = [];
  },
};

console.log(cartIt); // 添加商品之前
cartIt.addItemToCart({
  productName: "裙子",
  quantity: 20,
  price: 377,
});
console.log(cartIt.cartItems); // 添加商品之后
console.log(cartIt.clearCart()); // 清楚购物车
console.log(cartIt.cartItems); // 清楚购物车之后
